# 1、默认情况下，Python 不提供抽象类，Python 附带一个模块，该模块为定义抽象基类提供了基础，该模块名称为abc
# 2、当我们需要抽象基类时,让类继承 ABC(abc模块的ABC类)，使用 @abstractmethod 声明抽象方法(@abstractmethod用于声明抽象方法的装饰器,在abc模块中)，那么这个类就是抽象类
# 3、抽象类的价值更多作用是在于设计，是设计者设计好后，让子类继承并实现抽象类的抽象方法
from abc import ABC, abstractmethod


# Animal抽象类
class Animal(ABC):
    name = None
    age = None

    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 此时cry就是一个抽象方法
    @abstractmethod
    def cry(self):
        pass


# 定义Cat类继承Animal抽象类 实现cry抽象方法
class Cat(Animal):
    def cry(self):
        print("miao~")


# 抽象类不能实例化
# 这个是错误的
# animal = Animal("jack", 18)

cat = Cat("jack", 18)
cat.cry()